var User = require('./user.js');

function UserDao() {
	
	/**
	 * 添加新纪录
	 */
	this.insert=function(obj, ck) {
		var user = new User({
			username: obj.username,
			password: obj.password,
			mobile: obj.mobile,
			nickName: obj.nickName,
			photo: obj.photo,
			friends: obj.friends
		})
		user.save(function(err, res) {
			errorMessage(err);
			ck(res);
		})
	}
	
	/**
	 * 更新记录
	 */
	this.update=function(whereStr,updateStr,ck){
		User.updateOne(whereStr,updateStr,function(err,res){
			errorMessage(err);
			ck(res);
		})
	}
	
	/**
	 * 根据ID进行更新
	 */
	this.findByIdAndUpdate=function(id,updateStr,ck){
		User.findOneAndUpdate(id,updateStr,function(err,res){
			errorMessage(err);
			ck(res);
		})
	}
	
	/**
	 * 根据条件删除记录
	 */
	this.remove=function(whereStr,ck){
		User.remove(whereStr,function(err,res){
			errorMessage(err);
			ck(res);
		})
	}
	
	/**
	 * 根据ID删除记录
	 */
	this.findByIdAndRemove=function(id,wherStr,ck){
			User.findByIdAndRemove(id,function(err,res){
				errorMessage(err);
				ck(res);
			})
	}
	
	/**
	 * 查询指定字段的数据
	 */
	this.find=function(whereStr,field={},ck){
		User.find(whereStr,field,function(err,res){
			errorMessage(err);
			ck(res);
		})
	}

	/**
	 * 根据ID查询结果
	 */
	this.findById=function(id,ck){
		User.findById(id,function(err,res){
			errorMessage(err);
			ck(res);
		});
	}
	
	
	/**
	 * 查询数量
	 */
	this.count=function(whereStr,ck){
		User.count(whereStr,function(err,res){
			errorMessage(err);
			ck(res);
		})
	}
	
	function errorMessage(err){
		if(err){
			console.error("Error:" + err);
		}
	}
}

//使用闭包模拟单例
var single = (function() {
	var userDao;
	return function() {
		if(!userDao) {
			userDao = new UserDao();
		}
		return userDao;
	}
})();

module.exports = single();